#Requires AutoHotkey v2.0

#UseHook  ; 对所有热键使用钩子

#Requires AutoHotkey v2.0
; 这里至关重要，必须设置绝对屏幕，否则找色会失效
; 这里至关重要，必须设置绝对屏幕，否则找色会失效
; 这里至关重要，必须设置绝对屏幕，否则找色会失效
; 这里至关重要，必须设置绝对屏幕，否则找色会失效
; 这里至关重要，必须设置绝对屏幕，否则找色会失效
; 这里至关重要，必须设置绝对屏幕，否则找色会失效
; 这里至关重要，必须设置绝对屏幕，否则找色会失效
CoordMode "Pixel", "Screen"  ; 设置屏幕绝对坐标



; 右键处理主逻辑
~RButton::
{
    ; 正确的函数引用传递方式
    SetTimer(SendLeftBracket, -350)
}

; 定时器回调函数
SendLeftBracket() {
    Send("[")
}








; 爆闪自动监测系统
; 当我按下 / 键时，进入一次持续20秒的监听。监听开始时有个系统音效（什么音效都可以）。在监听中，如果检测到按下了鼠标左键，就立刻帮我按下]键。按下]键之后，监听立刻结束（不用等待20秒就结束），结束时候播放一个系统音效（区别于开始音效）

; 需要注意：
; 1、结束监听方式有两个，一个是正常20秒结束，另一个是按下]键之后，监听立刻结束。
; 2、使用AHK2.0的语法
; 3、如果我重复按下了 / 键，则重置监听计时器，播放监听开始音效

global gListenerActive := false


XButton2:: {  ; 斜杠热键
    
    if gListenerActive {  ; 如果已处于监听状态
        SetTimer(TimerProc, -20000)  ; 重置倒计时
        ; SoundPlay "*64"   ; 重新播放开始音效（系统通知音）
    } else {
        StartListener()  ; 首次启动监听
    }
    
}

StartListener() {
    global gListenerActive := true
    ; SoundPlay "*64"  ; 开始音效（系统通知音）
    SetTimer(TimerProc, -20000)  ; 设置20秒计时器
}

StopListener() {
    global gListenerActive := false
    SetTimer TimerProc, 0     ; 关闭计时器
    ; SoundPlay "*16"            ; 结束音效（系统感叹号音）
}

TimerProc() {  ; 自然超时回调
    if gListenerActive {
        StopListener()
    }
}









; 全局状态变量
global isRunning := false
global isLooping := false
global doublePressThreshold := 500  ; 双击检测时间 (毫秒)
global last2PressTime := 0          ; 2 键最后按下时间
global last1PressTime := 0          ; 1 键最后按下时间



; 热键绑定
~2::StartScript()   ; 按2键启动
~1::StopScript()    ; 按1键停止
~3::StopScript()    ; 按3键停止


~LButton Up:: {
    global isRunning, isLooping
    if isRunning {
        isLooping := false
        SetTimer(SendLeftClick, 0)
    }
}


; 启动脚本
StartScript() {
    global isRunning
    if !isRunning {
        isRunning := true
        ; 系统启动音效
        SoundPlay "*64"
        SetTimer () => ToolTip(), -1000
    }
}

; 停止脚本
StopScript() {
    global isRunning, isLooping
    if isRunning {
        isRunning := false
        isLooping := false
        SetTimer(SendLeftClick, 0)
        SoundPlay "*16"  ; 播放结束音效（系统感叹号音）
        SetTimer () => ToolTip(), -1000
    }
}

; 双击 2 键检测
; checkDouble2Press() {
;     global last2PressTime, doublePressThreshold, isRunning
;     currentTime := A_TickCount
    
;     if (currentTime - last2PressTime < doublePressThreshold) {
;         isRunning := true
;         ; ToolTip("脚本已启用 - 按住左键连点")
;         ; SetTimer () => ToolTip(), -2000
;     }
;     last2PressTime := currentTime
; }

; ; 双击 1 键检测
; checkDouble1Press() {
;     global last1PressTime, doublePressThreshold, isRunning, isLooping
;     currentTime := A_TickCount
    
;     if (currentTime - last1PressTime < doublePressThreshold) {
;         isRunning := false
;         isLooping := false
;         SetTimer(SendLeftClick, 0)
;         ; ToolTip("脚本已关闭")
;         ; SetTimer () => ToolTip(), -2000
;     }
;     last1PressTime := currentTime
; }

; 发送点击
SendLeftClick() {
    global isLooping, isRunning
    if isLooping && isRunning {
        Send("{LButton down}")
        Sleep(10)
        Send("{LButton up}")
    }
}

; ==============================
; 主热键控制
; ==============================
~LButton::
{
    ; 连狙
    global isRunning, isLooping
    if isRunning {
        isLooping := true
        ; 先点一下
        SendLeftClick()
        Sleep(10)
        SetTimer(SendLeftClick, 100)
    }

    ; 如果所有热键（包括爆闪）不好使，那么就是因为你shift是奔跑，请改为ctrl奔跑，问题就解决了！！！
    if gListenerActive {
        SendInput "{Blind}{]}"
        SendInput "]"
        SendPlay "]"

        StopListener()  ; 立即结束监听
        ; SoundPlay "*16"  ; 播放结束音效（系统感叹号音）
    }
}
